package Dao;

import entity.Filminfo;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import tool.MyBatisUtil;

import java.io.Reader;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class FilminfoDaoImpl implements FilminfoDao{
    SqlSessionFactoryBuilder builder =null;
    SqlSessionFactory factory=null;
    SqlSession sqlSession=null;
    Reader reader=null;
    public List<Filminfo> getFilminfos() {
        List<Filminfo> list =new ArrayList<>();
        try {
            //读取配置文件
            reader = Resources.getResourceAsReader("mybatis-config.xml");
            //构建builder
            builder = new SqlSessionFactoryBuilder();
            //构建factory
            factory = builder.build(reader);
            //构建sqlSession
            sqlSession = factory.openSession();
            //执行数据库操作  （dao接口的全限定名+id）
//            list = sqlSession.selectList("Dao.FilminfoDao.findfilminfo");
            list =sqlSession.getMapper(FilminfoDao.class).getFilminfos();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }finally {
            sqlSession.close();
        }
        return list;
    }


    public List<Filminfo> getFilminfosByname(String name) {
        List<Filminfo> list = new ArrayList<>();
        try {
            //读取配置文件
            reader = Resources.getResourceAsReader("mybatis-config.xml");
            //构建builder
            builder = new SqlSessionFactoryBuilder();
            //构建factory
            factory = builder.build(reader);
            //构建sqlSession
            sqlSession = factory.openSession();
            //执行数据库操作  （dao接口的全限定名+id）
//            list = sqlSession.selectList("Dao.FilminfoDao.findfilminfo");
            list = sqlSession.getMapper(FilminfoDao.class).getFilminfosByname(name);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            sqlSession.close();
        }
        return list;
    }


    public List<Filminfo> getFilminfosByCondition(String name, Integer money) {
        List<Filminfo> list = new ArrayList<>();
        try {
            sqlSession = MyBatisUtil.getSession();
            //执行数据库操作  （dao接口的全限定名+id）
            list = sqlSession.getMapper(FilminfoDao.class).getFilminfosByCondition(name,money);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            sqlSession.close();
        }
        return list;
    }


    public List<Filminfo> getFilminfosByCondition2(Map<String, Object> map) {
        List<Filminfo> list = new ArrayList<>();
        try {
            sqlSession = MyBatisUtil.getSession();
            //执行数据库操作  （dao接口的全限定名+id）
            list = sqlSession.getMapper(FilminfoDao.class).getFilminfosByCondition2(map);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            sqlSession.close();
        }
        return list;
    }


    public List<Filminfo> getFilminfosByCondition3(Filminfo filminfo) {
        List<Filminfo> list = new ArrayList<>();
        try {
            sqlSession = MyBatisUtil.getSession();
            //执行数据库操作  （dao接口的全限定名+id）
            list = sqlSession.getMapper(FilminfoDao.class).getFilminfosByCondition3(filminfo);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            sqlSession.close();
        }
        return list;
    }

    public List<Filminfo> getFilminfosByCondition4(Filminfo filminfo) {
        List<Filminfo> list = new ArrayList<>();
        try {
            sqlSession = MyBatisUtil.getSession();
            //执行数据库操作  （dao接口的全限定名+id）
            list = sqlSession.getMapper(FilminfoDao.class).getFilminfosByCondition4(filminfo);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            sqlSession.close();
        }
        return list;
    }


    public List<Filminfo> getFilminfosByCondition5(String choice) {
        List<Filminfo> list = new ArrayList<>();
        try {
            sqlSession = MyBatisUtil.getSession();
            //执行数据库操作  （dao接口的全限定名+id）
            list = sqlSession.getMapper(FilminfoDao.class).getFilminfosByCondition5(choice);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            sqlSession.close();
        }
        return list;
    }

    public List<Filminfo> getFilminfosByCondition6(Integer[] typeid) {
        List<Filminfo> list = new ArrayList<>();
        try {
            sqlSession = MyBatisUtil.getSession();
            //执行数据库操作  （dao接口的全限定名+id）
            list = sqlSession.getMapper(FilminfoDao.class).getFilminfosByCondition6(typeid);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            sqlSession.close();
        }
        return list;
    }

    public List<Filminfo> getFilminfosByCondition7(List<Integer> typeid) {
        List<Filminfo> list = new ArrayList<>();
        try {
            sqlSession = MyBatisUtil.getSession();
            //执行数据库操作  （dao接口的全限定名+id）
            list = sqlSession.getMapper(FilminfoDao.class).getFilminfosByCondition7(typeid);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            sqlSession.close();
        }
        return list;
    }

    public List<Filminfo> getFilminfosAndType() {
        List<Filminfo> list = new ArrayList<>();
        try {
            sqlSession = MyBatisUtil.getSession();
            //执行数据库操作  （dao接口的全限定名+id）
            list = sqlSession.getMapper(FilminfoDao.class).getFilminfosAndType();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            sqlSession.close();
        }
        return list;
    }

    public int getcount() {
        int result=-1;
        try {
            sqlSession = MyBatisUtil.getSession();
            //执行数据库操作  （dao接口的全限定名+id）
            result = sqlSession.getMapper(FilminfoDao.class).getcount();
        } catch (Exception e) {
            e.printStackTrace();
            return result;
        } finally {
           MyBatisUtil.closeSession();
        }
        return result;
    }

    public List<Filminfo> getFilmPage(Integer pageIndex, Integer pageSize) {
        List<Filminfo> list = new ArrayList<>();
        try {
            sqlSession = MyBatisUtil.getSession();
            //执行数据库操作  （dao接口的全限定名+id）
            list = sqlSession.getMapper(FilminfoDao.class).getFilmPage(pageIndex,pageSize);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            MyBatisUtil.closeSession();
        }
        return list;
    }

    public int getcount2(Filminfo filminfo) {
        int result=-1;
        try {
            sqlSession = MyBatisUtil.getSession();
            //执行数据库操作  （dao接口的全限定名+id）
            result = sqlSession.getMapper(FilminfoDao.class).getcount2(filminfo);
        } catch (Exception e) {
            e.printStackTrace();
            return result;
        } finally {
            MyBatisUtil.closeSession();
        }
        return result;
    }

    public List<Filminfo> getFilmPage2(Integer pageIndex, Integer pageSize, Filminfo filminfo) {
        List<Filminfo> list = new ArrayList<>();
        try {
            sqlSession = MyBatisUtil.getSession();
            //执行数据库操作  （dao接口的全限定名+id）
            list = sqlSession.getMapper(FilminfoDao.class).getFilmPage2(pageIndex,pageSize,filminfo);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            MyBatisUtil.closeSession();
        }
        return list;
    }

    public int delDilminfo(Integer filmid) {
        int result=-1;
        try {
            sqlSession = MyBatisUtil.getSession();
            //执行数据库操作  （dao接口的全限定名+id）
            result = sqlSession.getMapper(FilminfoDao.class).delDilminfo(filmid);
            sqlSession.commit();
        } catch (Exception e) {
            e.printStackTrace();
            sqlSession.rollback();
            return result;
        } finally {
            MyBatisUtil.closeSession();
        }
        return result;
    }

    public int addFilminfo(Filminfo filminfo) {
        int result=-1;
        try {
            sqlSession = MyBatisUtil.getSession();
            //执行数据库操作  （dao接口的全限定名+id）
            result = sqlSession.getMapper(FilminfoDao.class).addFilminfo(filminfo);
            sqlSession.commit();
        } catch (Exception e) {
            e.printStackTrace();
            sqlSession.rollback();
            return result;
        } finally {
            MyBatisUtil.closeSession();
        }
        return result;
    }

    public int updateFilminfo(Filminfo filminfo) {
        int result=-1;
        try {
            sqlSession = MyBatisUtil.getSession();
            //执行数据库操作  （dao接口的全限定名+id）
            result = sqlSession.getMapper(FilminfoDao.class).updateFilminfo(filminfo);
            sqlSession.commit();
        } catch (Exception e) {
            e.printStackTrace();
            sqlSession.rollback();
            return result;
        } finally {
            MyBatisUtil.closeSession();
        }
        return result;
    }
}
